// 本文件为通用js方法

/**
 * 1.时间格式化 (入参：时间戳，出参：yyyy-MM-dd HH:mm:ss)
 * @param {number} timestamp 时间戳
 * @param {string} format 格式 yyyy-MM-dd HH:mm:ss
 * @returns {string} 格式化后的时间字符串
 */
export const formatTime = (timestamp: number, format: string): string => {
    const date = new Date(timestamp);
    const year = date.getFullYear();
    const month = date.getMonth() + 1;
    const day = date.getDate();
    const hour = date.getHours();
    const minute = date.getMinutes();
    const second = date.getSeconds();
    if (format === 'yyyy-MM-dd HH:mm:ss') {
        return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')} ${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}:${second.toString().padStart(2, '0')}`;
    } else {
        return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
    }
};

/**
 * 2.获取最近几天的日期 (入参：最近天数，出参：日期数组，格式：yyyy-MM-dd)
 * @param {number} num 最近天数（包含今天）
 * @returns {string[]} 日期数组
 */
export const getLastDays = (num: number): string[] => {
    const result: string[] = [];
    for (let i = 0; i < num; i++) {
        const date = new Date();
        date.setDate(date.getDate() - i);
        result.push(formatTime(date.getTime(), 'yyyy-MM-dd'));
    }
    return result.reverse();
};

/**
 * 3.获取前几天的日期 (入参：天数，出参：日期，格式：yyyy-MM-dd)
 * @param {number} num 前几天
 * @returns {string} 日期
 */
export const getBeforeDays = (num: number): string => {
    const date = new Date();
    date.setDate(date.getDate() - num);
    return formatTime(date.getTime(), 'yyyy-MM-dd');
};

/**
 * 4.获取区间日期 (入参：开始日期，结束日期，出参：日期数组，格式：yyyy-MM-dd)
 * @param {string} startDate 开始日期
 * @param {string} endDate 结束日期
 * @returns {string[]} 日期数组
 */
export const getRangeDays = (startDate: string, endDate: string): string[] => {
    const result: string[] = [];
    const start = new Date(startDate);
    const end = new Date(endDate);
    while (start <= end) {
        result.push(formatTime(start.getTime(), 'yyyy-MM-dd'));
        start.setDate(start.getDate() + 1);
    }
    return result;
};

/**
 * 5.获取区间日期共多少天 (入参：开始日期，结束日期，出参：天数)
 * @param {string} startDate 开始日期
 * @param {string} endDate 结束日期
 * @returns {number} 天数
 */
export const getRangeDaysCount = (startDate: string, endDate: string): number => {
    const start = new Date(startDate);
    const end = new Date(endDate);
    return Math.ceil((end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));
};

/**
 * 6.获取当前时分秒 (入参：无，出参：时分秒，格式：HH:mm:ss)
 * @returns {string} 时分秒
 */
export const getCurrentTime = (): string => {
    const date = new Date();
    const hour = date.getHours();
    const minute = date.getMinutes();
    const second = date.getSeconds();
    return `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}:${second.toString().padStart(2, '0')}`;
};

/**
 * 7.获取2个时间的间隔时间 (入参：开始时间，结束时间，出参：间隔时间，格式：HH:mm:ss)
 * @param {string} startTime 开始时间
 * @param {string} endTime 结束时间
 * @returns {string} 间隔时间
 */
export const getIntervalTime = (startTime: string, endTime: string): string => {
    const start = new Date(startTime);
    const end = new Date(endTime);
    const interval = end.getTime() - start.getTime();
    const hour = Math.floor(interval / (1000 * 60 * 60));
    const minute = Math.floor((interval % (1000 * 60 * 60)) / (1000 * 60));
    const second = Math.floor((interval % (1000 * 60)) / 1000);
    return `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}:${second.toString().padStart(2, '0')}`;
};
